#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
char ch[120][120];
bool Is_ok(int x1, int y1, int x2, int y2, int w, int h) {
	if (w==h) {
		int n=w;
		bool flag=true;
		for (int i=0; i<n; ++i) {
			for (int j=0; j<n; ++j) {
				if (ch[x1+j][y1+n-i-1]!=ch[x2+i][y2+j]) flag=false;
//				cout<<ch[x1+j][y1+n-i-1];
			}
//			cout<<endl;
		}
		if (flag) return true;
		flag=true;
		for (int i=0; i<n; ++i) {
			for (int j=0; j<n; ++j) {
				if (ch[x1+n-j-1][y1+i]!=ch[x2+i][y2+j]) flag=false;
			}
		}
		if (flag) return true;
	}
	bool flag=true;
	for (int i=0; i<h; ++i) {
		for (int j=0; j<w; ++j) {
			if (ch[x1+i][y1+j]!=ch[x2+i][y2+j]) {
				flag=false;
			}
		}
	}
	if (flag) return true;
	flag=true;
	for (int i=0; i<h; ++i) {
		for (int j=0; j<w; ++j) {
			if (ch[x1+i][y1+j]!=ch[x2+h-i-1][y2+w-j-1]) {
				flag=false;
			}
		}
	}
	if (flag) return true;
	return false; 
}
struct node {
	int x,y;
};
int main() {
	int n,m,w,h;
//	freopen("in1.txt", "r", stdin);
	node tmp;
	while (cin>>n>>m) {
		for (int i=0; i<n; ++i) scanf("%s", ch[i]);
		w=0;
		while (ch[1][1+w]!='#') ++w;
		h=0;
		while (ch[1+h][1]!='#') ++h;
		vector<node> list;
		vector<bool> li;
		for (int i=1; i<n; ++i) {
			for (int j=1; j<m; ++j) {
				if (ch[i-1][j]=='#'&&ch[i][j-1]=='#'&&ch[i][j]!='#') {
					tmp.x=i, tmp.y=j;
					list.push_back(tmp);
					li.push_back(true);
				}
			}
		}
		int length=list.size();
//		cout<<Is_ok(6,1,6,6,w,h)<<endl;
//		cout<<"length: "<<length<<endl;
//		for (int i=0; i<length; ++i) cout<<list[i].x<<" "<<list[i].y<<endl; 
		int res=0;
		for (int i=0; i<length; ++i) {
			if (!li[i]) continue;
			for (int j=i+1; j<length; ++j) {
				if (Is_ok(list[i].x, list[i].y, list[j].x, list[j].y, w,h)) {
					li[j]=false;
					li[i]=false;
				}
			}
			++res;
		}
		cout<<res<<endl;
	}
	return 0;
} 
